﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using br.com.portocs.unidaacademico.dominio;
using br.com.portocs.unidaacademico.ui.views;


public partial class academico_DisciplinasCadastro : PageView
{

    private Disciplina obj;

    private string AreaId = "cadDisciplina";
    private string pagAnterior = "Disciplinas.aspx";

    private string subTituloPaginaAlterar = "Alteração de Cadastro";
    private string subTituloPaginaCriar = "Cadastrando novo item...";

    private bool voltarAcaoCriar = true; // após ação do usuario, voltar para pag anterior se acao = criar
    private bool voltarAcaoAlterar = true; // após ação do usuario, voltar para pag anterior se acao = Alterar

    //função executada no page load
    private void OutrasFuncoesCarregamento()
    {

        if (recuperarAcaoNaViewState() == "alterar")
        {

        }

        //popular os ddls
        if (!Page.IsPostBack)
        {            
            preencheControleLista(cmbTipoDisciplina, string.Empty,
                                  string.Empty, new ArrayList(Enum.GetNames(typeof (TipoDisciplina))),"- selecione -");
        }

    }




    //definir propriedades no formulario ( carregamento da pag ) obj => form
    private void CarregarFormulario()
    {
        tbNome.Text = getObjSessao().Nome;
        tbCh.Text = getObjSessao().CargaHoraria.ToString();
        chkAtivo.Checked = getObjSessao().Ativo;
        chkADistancia.Checked = getObjSessao().ADistancia;
        tbEmenta.Text = getObjSessao().Ementa;
        tbSigla.Text = getObjSessao().Sigla;
        cmbTipoDisciplina.SelectedValue = getObjSessao().TipoDisciplina.ToString();
    }

    //form => obj
    private void setarObjComInformacoesDoFormulario()
    {
        if (recuperarAcaoNaViewState() == "criar")
        {
            //alterar somente o nome da Classe----------------
            this.obj = new Disciplina();
            setarObjSessao(obj);
            //---------------------------

        }

        getObjSessao().Nome = tbNome.Text;
        getObjSessao().Ativo = chkAtivo.Checked;
        getObjSessao().CargaHoraria = long.Parse(tbCh.Text.Replace("horas","").Replace("h",""));
        getObjSessao().ADistancia = chkADistancia.Checked;
        getObjSessao().Ementa = tbEmenta.Text;
        getObjSessao().Sigla = tbSigla.Text;
        getObjSessao().TipoDisciplina =
            (TipoDisciplina)Enum.Parse(typeof(TipoDisciplina), cmbTipoDisciplina.SelectedValue, false);

    }

    //validações. se for para prosseguir com a ação do usuário, retornar true
    private bool formularioValidado()
    {
        bool retorno = true;

        if (tbNome.Text.Length == 0)
        {
            retorno = false;
            litAviso.Text = "- Por favor, insira um nome.<br />";
        }

        if (tbCh.Text.Length == 0)
        {
            retorno = false;
            litAviso.Text = "- Por favor, insira uma quantidade de horas para a Carga Horária.<br />";
        }


        if (!retorno) litAviso.Text += "*** Nada foi feito.";
        if (retorno) litAviso.Text = "";

        return retorno;
    }




    private void FuncoesPosAcaoDisciplinaeAcaoAlterar()
    {
        litAviso.Text = "Item alterado com sucesso.";
    }

    private void FuncoesPosAcaoDisciplinaeAcaoCriar()
    {
        litAviso.Text = "Item cadastrado com sucesso.";
    }



    #region Não editável

    private long ItemId = 0;


    //retorna objeto
    protected Disciplina getObjSessao()
    {
        if (obj == null)
        {
            if (ViewState["ItemObj"] != null)
                obj = (Disciplina)ViewState["ItemObj"];
            else
                CarregarObjeto();
        }
        return this.obj;
    }

    protected void setarObjSessao(Disciplina objS)
    {
        //ViewState["ItemObj"] = objS;
        obj = objS;
    }

    //setar acao na ViewState
    protected void setarAcaoNaViewState(string acao)
    {
        ViewState["acao"] = acao;

    }
    //recuperar acao na ViewState
    protected string recuperarAcaoNaViewState()
    {
        return ViewState["acao"].ToString();
    }

    //carrega Objeto
    protected void CarregarObjeto()
    {
        if (ItemId > 0)
            this.obj = new br.com.portocs.unidaacademico.repositorio.RepositorioBase<Disciplina>().RecuperarPorId(ItemId);
        else
            this.obj = new Disciplina();

        setarObjSessao(this.obj);
    }

    //seta a propriedade do Id
    protected void setaIdQueryString()
    {
        if (Request.QueryString["ItemId"] != null)
            this.ItemId = long.Parse(Request.QueryString["ItemId"]);
        else
            this.ItemId = 0;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        carregaArea(AreaId);

        //vendo o tipo inicial de comportamento em relação a estar criando ou alterando um obj
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["acao"].ToString() != null)
                setarAcaoNaViewState(Request.QueryString["acao"].ToString());
        }

        OutrasFuncoesCarregamento();

        if (recuperarAcaoNaViewState() == "alterar")
        {

            setaIdQueryString();

            if (!Page.IsPostBack)
            {

                CarregarObjeto();
                CarregarFormulario();
            }

            litSubtituloAcao.Text = subTituloPaginaAlterar;
        }
        else
        {
            litSubtituloAcao.Text = subTituloPaginaCriar;
        }

        

    }


    //função executava ao clicar em "salvar alterações"
    protected void btCriarSalvar_Click(object sender, EventArgs e)
    {
        if (formularioValidado())
        {
            setarObjComInformacoesDoFormulario();
            var dest = new br.com.portocs.unidaacademico.repositorio
                .RepositorioBase<Disciplina>()
                .SalvarOuAtualizar(getObjSessao());
    
            setarObjSessao(dest);
            var acao = recuperarAcaoNaViewState();

            if (acao == "criar")
            {
                FuncoesPosAcaoDisciplinaeAcaoCriar();
                limparObjs();
                Response.Redirect("Disciplinas.aspx");
            }

            else if (acao == "alterar")
            {
                FuncoesPosAcaoDisciplinaeAcaoAlterar();

                if (voltarAcaoAlterar)
                    Response.Redirect(pagAnterior);
            }
        }
    }

    private void limparObjs()
    {
        this.obj = null;
        setarObjSessao(null);

    }


    #endregion



}
